﻿package demo.util {
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.geom.Rectangle;

	public class DisplayObjectUtil {
		
		
		public static function isBrother(obj1:DisplayObject, obj2:DisplayObject):Boolean {
			//if(obj1.parent==null || obj2.parent==null)	return false;
			return (obj1.parent == obj2.parent);
		}		


		public static function scaleFitRectangle(target:DisplayObject, rect:Rectangle):void {
			var r:Rectangle = UniformScale.scaleByBox(target.width, target.height, rect.width, rect.height);
			target.width = r.width;
			target.height = r.height;
		}

		/**
		 * @usage
		 * import com.senocular.display.duplicateDisplayObject;
		 *
		 * // create duplicate and assign to newInstance variable
		 * // using true for autoAdd automatically adds the newInstance
		 * // into the display list where myOldSprite is located
		 * var newInstance:Sprite = duplicateDisplayObject(myOldSprite, true);
		 * newInstance.x += 100; // shift to see duplicate
		 *
		 * @des				creates a duplicate of the DisplayObject passed. similar to duplicateMovieClip in AVM1
		 *
		 * @param target 	the display object to duplicate
		 * @param autoAdd 	if true, adds the duplicate to the display list in which target was located
		 *
		 * @return 			a duplicate instance of target
		 */
		public static function duplicateDisplayObject(target:DisplayObject, autoAdd:Boolean = false):DisplayObject {
			// create duplicate
			var targetClass:Class = Object(target).constructor;
			var duplicate:DisplayObject = new targetClass();

			// duplicate properties
			duplicate.transform = target.transform;
			duplicate.filters = target.filters;
			duplicate.cacheAsBitmap = target.cacheAsBitmap;
			duplicate.opaqueBackground = target.opaqueBackground;
			if (target.scale9Grid) {
				var rect:Rectangle = target.scale9Grid;
				// WAS Flash 9 bug where returned scale9Grid is 20x larger than assigned
				// rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
				duplicate.scale9Grid = rect;
			}

			// add to target parent's display list
			// if autoAdd was provided as true
			if (autoAdd && target.parent) {
				target.parent.addChild(duplicate);
			}
			return duplicate;
		}

	}
}

